Project Euler
- 공식 홈페이지 - projecteuler.net
- 한글 번역 - projecteuler @kr
- (HackerRank) ProjectEuler+ - hackerrank.com
Problem
- No 4 : Largest palindrome product
- HackerRank : Project Euler #4: Largest palindrome product
Largest palindrome product
problem <번역>
solution
Simple Code
세자리 수 중 가장 큰 999부터 하나씩 곱해가며 가장 큰 수를 구한다.
큰 숫자 중 문자열 비교를 통해 숫자가 대칭인지 확인한다.
def largest_palindrome_product(): |
HackerRank
HackerRank 문제에서는 정수 N을 입력 받아 해당 정수보다 작은 palindrome number를 출력해야 한다.
그래서 리스트에 저장하고 역순으로 정렬하여 반복문을 통해 조건을 확인하는 방식으로 작성했다.
def largest_palindrome_product(): |
palindrome number의 자리수가 짝수일 때, 11로 나누어 떨어진다.
예를 들어 a, b, c가 정수이고 a != 0 일 때,
N(6, a, b, c) = 100001 * a + 10010 * b + 1100 * c
= abccba = 11 * (9091 * a + 910 * b + 100 * c)
N(8, a, b, c,d) = 10000001 * a + 1000010 * b + 100100 * c + 11000 * d
= abcddcba = 11 * (909091 * a + 90910 * b + 9100 * c + 1000 * d)
임을 확인할 수 있다.
주의할 것은 해당 문제에서 세자리 수 2개를 곱한 값의 자리수가 꼭 짝수는 아니다.
예를 들어,
777 * 117 = 90909 (5자리)
812 * 104 = 84448 (5자리)
813 * 123 = 99999 (5자리)
이러한 palindrome number는 11로 나누어지지 않는다.
어쨌든 최대값을 구하는 것이기 때문에 위 내용을 활용해서 조금 더 최적화 시킬 수 있는데 아래의 링크에서 자세히 설명되어 있다.
Project Euler 4 Solution: Largest palindrome product